Alteryxで特定のキーでランダムサンプリング
こんにちは、小澤です。
データを分析する際、いきなり大量のデータを扱うと時間がかかるのでまずはランダムサンプリングしてうまくいくか試してみたい時があります。 Alteryxにはそんな時便利なRandom % Sampleツールがあります。
このツールを使うと、件数またはパーセンテージを指定してランダムサンプリングすることができます。 乱数のシードを選択することもできるので再現も可能な便利ツールです。
しかし、データ全体ではなく特定の要素をランダムサンプリングして、それに紐づくデータは保持しておきたいなどの場合があります。 今回は、そういったことを実現する方法を見ていきます。
そのままランダムサンプリングするとダメって?
こういった状況があったりなかったりと、世の中は複雑です。 適当にランダムサンプリングすると、必要なデータの一部が失われてしまったりして困ることがあったりします。
そういったことが起こる状況というのは様々ですが、今回は以下のような例を考えてみましょう。
- とあるショッピングサイト
- 同時に購入されている商品を知りたい
さて、これに対して
- 購入したユーザID
- 購入された商品ID
- セッションID
というログが残っているとしましょう。 同一のセッションIDを持つものが一緒に購入された商品です。
このデータに対して、そのままランダムサンプリングしてしまうと、同時に買った商品情報が失われてしまう可能性があります。 悲しいですね。
そこで、今回はちょっとした工夫をしてみます。 上記のデータに対して、ユーザIDでランダムサンプリングをして、サンプリングされたユーザでの同時購入の傾向を見ていこうと思います。
実際にやってみる
上記のデータがこんな感じで10万件程度あります。 ユーザ数は1000, 商品数は300となっています(サンプリングするほどでもないですが、気にしないであげてください)
これに対してユーザIDでサンプリングするワークフローは以下のようになります。
何をしているのか見ていきましょう。
まず最初のSelectツールでは、user_id以外の列を削除しています。 これは必須ではありませんが、データ件数が多い時はあまり持ち回したくないので入れておきます。
続いて、UniqueツールでユーザIDの重複を削除します。
そのあとに、Random % SampleツールでユーザIDのサンプリングを行っています。
サンプリング方法は、実際にやる時の要件に依存しますが、今回は10%のデータに絞っています。
最後にJoinツールを使って、user_idをキーにして元データと結合することで、user_id単位でサンプリングされたデータとなります。
「J」の出力にサンプリング対象のデータ、「L」の出力に対象にならなかったデータが出力されているのが確認できるかと思います。
おわりに
今回は、Alteryxのちょっとしたテクニックとして、特定のキーでランダムサンプリングする方法を紹介しました。
Alteryxではこのようにツールの組み合わせで様々なことが実現できます。 慣れるまでは、難しく感じるかもしれませんが、データを自由自在に操作していくにはこういったテクニックの組み合わせをいろいろ試すことでできることの幅が広がるのではないかと思います。
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。